package com.ruifu.worksheet.mapper;


import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.worksheet.dto.WsCommonAttachFileDTO;
import com.ruifu.worksheet.dto.WsCommonRelationSheetDTO;
import com.ruifu.worksheet.dto.WsCommonSheetDTO;
import com.ruifu.worksheet.dto.WsCustomizeTypeDTO;
import com.ruifu.worksheet.vo.WsCommonSheetVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

/**
 * @author yuanyundi
 * @date 2020/04/14
 */
@Mapper
public interface WsCommonSheetMapper {
    /**
     * 变更单类型查询
     * @param typeName 工作单类型ID
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单
     * @return WsCustomizeTypeDTO 变更单类型DTO
     */
    WsCustomizeTypeDTO findByName(@Param("typeName") String typeName, @Param("classFlag") int classFlag, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 获取工作单类型下拉集合
     *
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单
     * @param cloudUser 用户登录人员信息
     * @return String 工作单类型拼接字符串，逗号分隔
     */
    String findTypeNameSelect(@Param("classFlag") int classFlag,@Param("cloudUser") CloudUser cloudUser);

    /**
     * 工作单列表查询
     *
     * @param wsCommonSheetVO 查询参数
     * @param cloudUser 登陆人员信息
     * @return List<WsCommonSheetDTO> 通用工作单DTO集合
     */

    List<WsCommonSheetDTO> findAll(@Param("wsCommonSheetVO") WsCommonSheetVO wsCommonSheetVO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 根据工作单编号查询工作单ID
     *
     * @param cmCode 工作单编号
     * @return BigInteger 工作单ID
     */
    BigInteger findByWsCode(@Param("cmCode") String cmCode);

    /**
     * 工作单新增
     *
     * @param wsCommonSheetDTO 工作单提交数据
     * @param cloudUser 用户登录信息
     */
    void insertWorkSheet(@Param("wsCommonSheetDTO") WsCommonSheetDTO wsCommonSheetDTO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 问题报告单附件表新增
     *
     * @param wsCommonAttachFileDTO 附件表数据
     * @param cloudUser 登陆人员信息
     */
    void insertAttachFile(@Param("wsCommonAttachFileDTO") WsCommonAttachFileDTO wsCommonAttachFileDTO, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 工作单单一查询
     *
     * @param cmId 工作单主键
     * @return WsCommonSheetDTO 通用工作单DTO
     */
    WsCommonSheetDTO findWorkSheetById(@Param("cmId") BigInteger cmId);

    /**
     * 附件表单一查询
     *
     * @param cmId 工作单主键
     * @return  List<WsCommonAttachFileDTO>  通用工作单附件DTO集合
     */
    List<WsCommonAttachFileDTO> findAttachFile(@Param("cmId") BigInteger cmId);

    /**
     * 工作单编辑提交
     *
     * @param wsCommonSheetDTO 工作单数据实体
     * @param cloudUser 登录人员信息
     */
    void updateWorkSheet(@Param("wsCommonSheetDTO") WsCommonSheetDTO wsCommonSheetDTO,CloudUser cloudUser);

    /**
     * 工作单附件表数据作废处理
     *
     * @param cmId 工作单ID
     */
    void cancelAttarchFile(@Param("cmId") BigInteger cmId);

    /**
     * 工作单数据作废
     *
     * @param cmId 工作单ID
     */
    void cancelWorkSheet(@Param("cmId") BigInteger cmId);

    /**
     * 工作单编号同账套唯一校验
     *
     * @param wsCode 工作单编号
     * @param cloudUser 登录人员信息
     */
     int countRow(@Param("wsCode")String wsCode, @Param("cloudUser") CloudUser cloudUser);

    /**
     * 查询变更单关联的流程ID
     *
     * @param cmId 工作单ID
     * @return String 工作流模板ID
     */
     String selectFlowIdByWsId(@Param("cmId") BigInteger cmId);

    /**
     * 关联变更单新增
     *
     * @param wsCommonRelationSheetDTO 关联变更单
     * @param cloudUser 登录用户人员
     */
    void saveRelatedSheet(@Param("wsCommonRelationSheetDTO") WsCommonRelationSheetDTO wsCommonRelationSheetDTO,@Param("cloudUser") CloudUser cloudUser);

    /**
     * 关联变更单查询
     *
     * @param cmId 工作单主键
     * @param cloudUser 用户登录人员信息
     * @return List<WsCommonRelationSheetVO> 关联变更单数据集合
     */
    List<WsCommonRelationSheetDTO> findRelatedSheet(@Param("cmId") BigInteger cmId,@Param("cloudUser") CloudUser cloudUser);

    /**
     * 根据主变更单cmId清空关联变更单
     *
     * @param cmId 工作单主键
     */
    void delRelateSheetByMainId(@Param("cmId") BigInteger cmId,@Param("cloudUser") CloudUser cloudUser);

    /**
     * 修改工作单状态
     *
     * @param cmId 工作单ID
     * @param statusVal 状态值
     */
    void updateStatusById(@Param("cmId") BigInteger cmId,@Param("statusVal") String statusVal);

    /**
     * 查询关联问题对象ID集合
     *
     * @parame cmId 工作单ID
     * @return String 关联问题单IDS
     */
    String findAttAchFileIDS(@Param("cmId") BigInteger cmId);

    /**
     * 同步修改问题对象状态
     *
     * @param cmId 工作单ID
     */
    void updateAttachFileStatus(@Param("cmId") BigInteger cmId);


    /**
     * 查询源账套数据
     *
     * @param sourceSetId 源setId
     * @return List<WsCommonSheetDTO> 工作单集合
     */
    List<WsCommonSheetDTO> selectListBySetId(@Param("sourceSetId") Long sourceSetId);

    /**
     * 插入目标账套数据
     *
     * @param WsCommonSheetDTO 工作单
     */
    void insertWsDTO(@Param("wsCommonSheetDTO") WsCommonSheetDTO wsCommonSheetDTO);
}
